package com.lichuang.dedao.user.service;

import com.lichuang.dedao.user.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lichuang.dedao.user.vo.UserVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>
 * 用户 服务类
 * </p>
 *
 * @author hanghang
 * @since 2019-07-12
 */
public interface IUserService extends IService<User> {

    /**
     * 发送短信验证码
     *
     * @param phone 手机号
     */
    void sendSms(String phone);

    /**
     * 校验验证码
     *
     * @param phone   手机号
     * @param newCode 用户输入的验证码
     * @return true验证成功    false验证失败
     */
    boolean validationCode(String phone, Integer newCode);

    /**
     * 登录和注册
     *
     * @param phone    手机号
     * @param response 用来添加cookie
     * @return 用户信息
     */
    User loginAndRegistry(String phone, HttpServletResponse response);

    /**
     * 用密码登录
     * 必须传入手机号和密码${@link User}
     *
     * @param userParam 用来查询
     * @return 用户信息
     */
    User loginWithPassword(User userParam);

    /**
     * 拿到当前登录的用户信息
     *
     * @param loginToken 登录token
     * @return 用户信息
     */
    User getCurrentLoginUser(String loginToken);

    /**
     * 展示用户信息
     *
     * @param loginToken 登录token
     * @return VO层用户信息
     */
    UserVO showUserInfo(String loginToken);

    void saveUserWithRedisAndSaveTokenWithCookie(User user, HttpServletResponse response);

    void saveTokenWithCookie(String token, HttpServletResponse response);

    User updateUserWithRedis(User user, String token);

    /**
     * 通过id查询用户信息
     *
     * @param id 用户id
     * @return 用户信息
     */
    User selectUserById(Integer id);

    /**
     * 当前用户关注人的集合
     *
     * @param userId 用户id
     * @return 用户集合
     */
    List<User> selectFollowedUser(Integer userId);

    /**
     * 当前用户粉丝的集合
     *
     * @param userId 用户id
     * @return 用户集合
     */
    List<User> selectFollowerUser(Integer userId);
}
